package T11_20;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class T19 {
    public List<Integer> spiralOrder(int[][] matrix) {
        /*思路：1 定义上下左右四个边界 t,r,b,l
         * 2 螺旋矩阵遍历顺序：从左到右->从上到下->从右到左->从下到上，每次改变方向都要收缩一次边界*/
        if (matrix.length==0)return new ArrayList<Integer>();
        int t=0,l=0,r=matrix[0].length-1,b=matrix.length-1,x=0;
        Integer[] res=new Integer[(r+1)*(b+1)];
        while (true){
            //从左到右遍历数组
            for (int i=l;i<=r;i++)res[x++]=matrix[t][i];
            if (++t>b)break;
            //从上到下遍历
            for (int i=t;i<=b;i++)res[x++]=matrix[i][r];
            if (l>--r)break;
            //从右到左
            for (int i=r;i>=l;i--)res[x++]=matrix[b][i];
            if (t>--b)break;
            //从下到上
            for(int i=b;i>=t;i--)res[x++]=matrix[i][l];
            if(++l>r)break;
        }
        return Arrays.asList(res);
    }
}
